#include "msq.h"

int main(void)
{
	struct msgbuf msg;

	/*获取key*/
	key_t key = ftok(".", 'q');
	printf("key:%d\n",key);

	/*创建/打开信号量集*/
	int semid = semget(key, 1, IPC_CREAT|0666);//信号量集只有1个信号量
	if(semid < 0)
	{
		perror("semget");
		return 1;
	}
	printf("semid:%d\n",semid);

	/*初始化信号量集*/
	sem_init(semid, 0, 1);

	/*创建/打开消息队列*/
	int msqid = msgget(key, IPC_CREAT|0666);
	if(msqid < 0)
	{
		perror("msgget");
		return 1;
	}
	printf("msqid:%d\n",msqid);

	/*发送消息*/
	msg.mtype = SENDTYPE_A;
	msg.pid = getpid();
	
	while(1)
	{
		bzero(msg.mtext, size);
		sem_p(semid, 0);//P操作
		fgets(msg.mtext, size, stdin);
		msgsnd(msqid, &msg, sizeof(msg), 0);
		sem_v(semid, 0);//V操作

		if(strncmp(msg.mtext,"quit",4) == 0)	break;
	}

	/*删除消息队列*/
	sleep(1);//等待接收方读取最后一条消息
	msgctl(msqid, IPC_RMID, NULL);

	/*删除信号量集*/
	sem_remove(semid);

	return 0;
}

